Hellforge General Crackme IV
by LaZaRuS
Tutorial de Lucifer48 [Immortal Descendants]
(16 juillet 1999)
Ce crackme a ΘtΘ compilΘ par un compilateur inconnu (RHG-Profan). Pour ma part, je trouve que τa
ressemble un peu α du delphi dans le sens o∙ il y a trΦs peu d'appel α l'api, et des call sont
appΘlΘs α plusieurs reprises pour diverses raisons. Allons y ! Voilα deux faτons d'entrer dans le
code: bpx MessageBoxA ou bpx Hmemcpy.
XXXX:00421582 PUSH EBP
XXXX:00421583 CALL 0041D35C ;lit le nom, puis ensuite le serial (*)
XXXX:00421588 POP ECX
XXXX:00421589 JMP 00421907
...
XXXX:0042159A PUSH EBP
XXXX:0042159B CALL 0041E3C4 ;mauvais serial (affiche la MessageBoxA)
(*) Ce call est appΘlΘ deux fois, la premiΦre fois le nom est lu (via SendMessageA, ce n'est pas
une dialog box), la deuxiΦme fois c'est le serial.
Dans le call 0041D35C:
...
XXXX:0041D3C7 MOV EDX,[EBP-0104] ;le nom (se termine par un caractΦre nul)
XXXX:0041D3CD MOV EAX,00430518 ;destination (voir remarque)
XXXX:0041D3D2 MOV ECX,000000FF ;255 caractΦres maximun
XXXX:0041D3D7 CALL 00403AC8
Remarque: En 00430518, le nom aura ce format (taille du nom suivi du nom):
-----CRACKME!BSS+1518------------------------------byte--------------PROT---(0)--
XXXX:004305018 09 4C 75 63 69 66 65 72-34 38 .Lucifer48......
---------------------------------------------------------------------------------
Plus tard, α ce mΩme endroit (00430518), le serial sera lu et aura la mΩme disposition. J'ai donc
dΘcidΘ de mettre un petit breakpoint (BPM 004305018 W) pour voir ce qui ce passe.
Voilα le rΘsultat partiel (voilα tour α tour le chaεnes de caractΦres qui sont copiΘes):
Lucifer48
name$
Lucifer48
serial2%
1234
serial2%
SERIAL
5678
serial2%
SERIAL
16784 ;<------ the right serial !!
serial%
36157800 ;comparaison avec mon serial (faite aprΦs la crΘation du bon serial)
That was wrong
D'ou sort ce serial ?? Comment est-il calculΘ ??
Nous allons regarder ce qui ce passe lors de la recopie du serial. C'est ici:
XXXX:00402D7A MOV AL,[EBX+ESP-01] ;ebx=5
XXXX:00402D7E MOV [EDI],AL ;edi=0043051x
XXXX:00402D80 INC EDI
XXXX:00402D81 DEC EBX
XXXX:00402D82 JNZ 00402D7A
(attention cette "routine" sert α plusieurs reprises...)
Et juste au dessus:
XXXX:00402D3C MOV ECX,0000000A
XXXX:00402D41 XOR EBX,EBX
XXXX:00402D43 XOR EDX,EDX
XXXX:00402D45 DIV ECX ;conversion hΘxadΘcimal -> dΘcimal
XXXX:00402D47 ADD EDX,30
XXXX:00402D4A MOV [EBX+ESP],DL
XXXX:00402D4D INC EBX
XXXX:00402D4E TEST EAX,EAX
Pour mon nom j'ai 16784 = 4190h d'o∙ sort ce 4190h ???
Je dΘcouvre que, seul la longueur du nom est importante !
* 1 caractΦre, (1B00h), serial/ 6912
* 2 caractΦres, (1FD2h), serial/ 8146
* 3 caractΦres, (24A4h), serial/ 9380
...
* 9 caractΦres, (4190h), serial/ 16784
Et donc..... serial = 5678 + 1234*(taille-du-nom)
239ko pour τa !!!!!!
Greetings: All ID members (Volatility, Torn@do, ...), Eternal Bliss, ACiD BuRN,
Duelist, LaZaRuS, people on #cracking4newbies, french crackers, and other crackme makers.
(c) Lucifer48. All rights reversed